//
//不用到“+”“-”，计算两数之和
//https://leetcode.cn/problems/sum-of-two-integers/description/

public class Test {
    public static void main(String[] args) {
        //
    }
}
class Solution {
    public int getSum(int a, int b) {
        //“不用“+”“-”——位运算”
        //递归——有点这种感觉，不过这里用了while循环
        while (b != 0) {
            int x = a ^ b;//无进位相加 的 结果
            int carry = (a & b) << 1;//进位情况
            a = x;
            b = carry;
        }
        return a;
    }
}
class Solution1 {
    public int getSum(int a, int b) {
        //“不用“+”“-”——位运算”
        //递归——有点这种感觉，不过这里用了while循环



        int m = (a&b)<<1;//有无进位
        int n = a^b;

        while(m!=0){//有进位
            a = n;
            b = m;
            m = (a&b)<<1;
            n = a^b;
        }

        return n;//这里需要注意：返回的是n，而不是a（最后一次循环后，没有执行到再次给a赋值成最新的n）
    }
}
